4.1 Dart Runtime 的 gn 构建
runtime/bin
下的 BUILD.gn,声明了 Dart Runtime 的库可执行文件。这些产物涵盖了Dart运行时的核心组件、开发工具、测试工具等各个方面,为Dart语言的执行和开发提供了完整的支持。Dart Runtime构建了以下主要产物:
libdart_builtin
- Dart 内置功能的静态库gen_snapshot
- 用于生成 Dart 快照的可执行文件dart_io
- dart:io库的实现dart_snapshot_cc
- 包含 Dart VM 和 isolate 快照数据的源文件dart_kernel_platform_cc
- 包含 kernel service 和平台 dill 文件的源文件dart
- Dart VM 的主要可执行文件dart_precompiled_runtime
- 预编译的 Dart 运行时可执行文件analyze_snapshot
- 用于分析快照文件的工具(仅在特定配置下构建)run_vm_tests
- 用于运行VM测试的可执行文件- 一些测试相关的库:
entrypoints_verification_test
ffi_test_dynamic_library
ffi_test_functions
dart_libfuzzer
- 用于模糊测试的特殊构建(仅在特定配置下构建)
此外还有一些辅助目标,如将二进制文件转换为可链接对象的模板等。
export_api_symbols
export_api_symbols
是在这个 BUILD.gn 文件中定义的一个配置(config)。它的主要目的是确保 Dart API 的符号在构建的库或可执行文件中被正确导出。这对于允许其他程序或库与 Dart 运行时进行交互非常重要。
这个配置根据不同的平台和编译器设置了不同的链接器标志(ldflags):
- 在 Windows 上,它导出
Dart_True
符号。 - 对于使用地址 sanitizer、内存 sanitizer 等的构建,它导出所有符号(
-rdynamic
)。 - 在 macOS 上,它导出所有以
_Dart_
开头的符号。 - 对于非 Clang 编译器(如 GCC),它暂时使用
-rdynamic
导出所有符号。 - 对于其他情况(主要是 Linux 上的 Clang),它导出所有以
Dart_
开头的符号。
这个配置的主要作用是确保 Dart API 的公共符号在最终的二进制文件中是可见的,这样其他程序就可以链接到 Dart 运行时并使用这些 API。
在构建过程中,这个配置被应用到多个目标上,例如 dart
可执行文件和 run_vm_tests
。这确保了这些构建产物正确地导出了必要的 Dart API 符号。
Dart Library API
Dart 在 C/C++ 底层提供了一系列 API,通过上一节可以看出,他们均以 Dart_
开头。
在代码中,此类 API 通常也会被 DART_EXPORT
宏所修饰。
比如,runtime/include/dart_api_dl.h
,这是专门用于动态链接的 Dart API。
本文作者:Maeiee
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!